#ifndef UNIVERSAL_MANAGER_H
#define UNIVERSAL_MANAGER_H

#include "submodule_types.h"
#include <vector>
#include <memory>

namespace usm {

class UniversalSubmoduleManager {
public:
    UniversalSubmoduleManager();
    ~UniversalSubmoduleManager() = default;
    
    // 配置管理
    void loadConfiguration(const std::string& config_path);
    void addMirrorProvider(const MirrorProvider& provider);
    void setPreferredProviders(const std::vector<std::string>& provider_names);
    
    // 核心功能
    ProjectAnalysis analyzeProject(const std::string& project_path);
    std::vector<MirrorEvaluation> evaluateMirrors(const SubmoduleInfo& submodule);
    bool migrateToOptimalMirrors(const std::string& project_path);
    bool createMissingMirrors(const ProjectAnalysis& analysis);
    
    // 批量操作
    std::vector<ProjectAnalysis> analyzeProjects(const std::vector<std::string>& project_paths);
    bool batchMigrate(const std::vector<std::string>& project_paths);
    
    // 统计和报告
    void generateReport(const ProjectAnalysis& analysis, const std::string& output_path);
    void showStatistics() const;

private:
    std::vector<MirrorProvider> providers_;
    std::vector<SubmoduleInfo> global_submodule_cache_;
    
    // 核心算法接口
    std::vector<SubmoduleInfo> parseSubmodules(const std::string& project_path);
    int calculateComprehensiveScore(const MirrorEvaluation& eval);
    bool validateMirrorCompatibility(const std::string& mirror_url, const SubmoduleInfo& submodule);
    
    // 网络操作接口
    bool checkMirrorAvailability(const std::string& url);
    int fetchReferenceCount(const std::string& repo_url);
    std::string fetchLastUpdateTime(const std::string& repo_url);
};

} // namespace usm
#endif
